package com.lmx.healthcode.common.base;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

/**
 * @author Leung
 * @date 2020/9/11 19:58
 */
public abstract class BaseHolderRv<T> extends RecyclerView.ViewHolder {

    /**
     * 上下文
     */
    private Context context;

    /**
     * 父容器
     */
    private ViewGroup parent;

    /**
     * 适配器
     */
    private BaseAdapterRv<T> adapter;

    /**
     * bean类
     */
    private T bean;

    /**
     * 列表项位置
     */
    private int position;

    public BaseHolderRv(Context context, int layoutId, ViewGroup parent, BaseAdapterRv<T> adapter, int itemType) {
        super(inflate(context, layoutId, parent));
        this.context = context;
        this.parent = parent;
        this.adapter = adapter;
        findView(itemView);
        itemView.setOnClickListener(v -> onItemClick(v, position, bean));
    }

    private static View inflate(Context context, int layoutId, ViewGroup parent) {
        return LayoutInflater.from(context).inflate(layoutId, parent, false);
    }

    /**
     * 绑定itemView中的子控件
     *
     * @param itemView 列表项视图
     */
    public abstract void findView(View itemView);

    /**
     * 刷新视图
     *
     * @param bean 列表项实体类
     * @param position 列表项位置
     */
    public void refreshView(T bean, int position) {
        this.bean = bean;
        this.position = position;
        onRefreshView(bean, position);
    }

    /**
     * 刷新视图
     *
     * @param bean 列表项实体类
     * @param position 列表项位置
     */
    public abstract void onRefreshView(T bean, int position);

    /**
     * 列表项点击事件
     *
     * @param itemView 列表项视图
     * @param position 列表项位置
     * @param bean 列表项实体类
     */
    public void onItemClick(View itemView, int position, T bean) {
    }

}
